// utils/util.js

/**
 * 格式化时间
 * @param {Date} date 日期对象
 * @param {String} format 格式字符串
 * @returns {String} 格式化后的时间字符串
 */
function formatTime(date, format = 'YYYY-MM-DD HH:mm:ss') {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return format
    .replace('YYYY', year)
    .replace('MM', month.toString().padStart(2, '0'))
    .replace('DD', day.toString().padStart(2, '0'))
    .replace('HH', hour.toString().padStart(2, '0'))
    .replace('mm', minute.toString().padStart(2, '0'))
    .replace('ss', second.toString().padStart(2, '0'))
}

/**
 * 防抖函数
 * @param {Function} func 要防抖的函数
 * @param {Number} wait 等待时间
 * @returns {Function} 防抖后的函数
 */
function debounce(func, wait) {
  let timeout
  return function executedFunction(...args) {
    const later = () => {
      clearTimeout(timeout)
      func(...args)
    }
    clearTimeout(timeout)
    timeout = setTimeout(later, wait)
  }
}

/**
 * 节流函数
 * @param {Function} func 要节流的函数
 * @param {Number} limit 时间间隔
 * @returns {Function} 节流后的函数
 */
function throttle(func, limit) {
  let inThrottle
  return function(...args) {
    if (!inThrottle) {
      func.apply(this, args)
      inThrottle = true
      setTimeout(() => inThrottle = false, limit)
    }
  }
}

/**
 * 生成唯一ID
 * @returns {String} 唯一ID
 */
function generateId() {
  return Date.now().toString(36) + Math.random().toString(36).substr(2)
}

/**
 * 深拷贝对象
 * @param {*} obj 要拷贝的对象
 * @returns {*} 拷贝后的对象
 */
function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') return obj
  if (obj instanceof Date) return new Date(obj.getTime())
  if (obj instanceof Array) return obj.map(item => deepClone(item))
  if (typeof obj === 'object') {
    const clonedObj = {}
    for (const key in obj) {
      if (obj.hasOwnProperty(key)) {
        clonedObj[key] = deepClone(obj[key])
      }
    }
    return clonedObj
  }
}

/**
 * 计算价格（处理浮点数精度问题）
 * @param {Number} price 价格
 * @param {Number} quantity 数量
 * @returns {Number} 计算结果
 */
function calculatePrice(price, quantity) {
  return Math.round((price * quantity) * 100) / 100
}

/**
 * 格式化价格
 * @param {Number} price 价格
 * @returns {String} 格式化后的价格字符串
 */
function formatPrice(price) {
  return '¥' + price.toFixed(2)
}

/**
 * 验证手机号
 * @param {String} phone 手机号
 * @returns {Boolean} 是否有效
 */
function validatePhone(phone) {
  const phoneReg = /^1[3-9]\d{9}$/
  return phoneReg.test(phone)
}

/**
 * 验证邮箱
 * @param {String} email 邮箱
 * @returns {Boolean} 是否有效
 */
function validateEmail(email) {
  const emailReg = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
  return emailReg.test(email)
}

/**
 * 获取图片信息
 * @param {String} src 图片路径
 * @returns {Promise} 图片信息
 */
function getImageInfo(src) {
  return new Promise((resolve, reject) => {
    // 抖音小程序图片信息获取
    resolve({
      width: 300,
      height: 300,
      path: src
    })
  })
}

/**
 * 显示加载提示
 * @param {String} title 提示文字
 */
function showLoading(title = '加载中...') {
  console.log('显示加载:', title)
}

/**
 * 隐藏加载提示
 */
function hideLoading() {
  console.log('隐藏加载')
}

/**
 * 显示成功提示
 * @param {String} title 提示文字
 */
function showSuccess(title) {
  console.log('成功提示:', title)
}

/**
 * 显示错误提示
 * @param {String} title 提示文字
 */
function showError(title) {
  console.log('错误提示:', title)
}

/**
 * 确认对话框
 * @param {String} content 内容
 * @param {String} title 标题
 * @returns {Promise} 确认结果
 */
function showConfirm(content, title = '提示') {
  return new Promise((resolve) => {
    console.log('确认对话框:', title, content)
    resolve(true)
  })
}

/**
 * 页面跳转
 * @param {String} url 跳转地址
 * @param {String} type 跳转类型 navigateTo/redirectTo/switchTab
 */
function navigateTo(url, type = 'navigateTo') {
  console.log('页面跳转:', type, url)
}

/**
 * 设置导航栏标题
 * @param {String} title 标题
 */
function setNavigationBarTitle(title) {
  console.log('设置标题:', title)
}

/**
 * 获取系统信息
 * @returns {Promise} 系统信息
 */
function getSystemInfo() {
  return new Promise((resolve) => {
    resolve({
      platform: 'devtools',
      system: 'iOS 10.0',
      version: '7.0.0'
    })
  })
}

/**
 * 获取用户信息
 * @returns {Promise} 用户信息
 */
function getUserInfo() {
  return new Promise((resolve) => {
    resolve({
      nickName: '测试用户',
      avatarUrl: '/images/avatar.jpg'
    })
  })
}

module.exports = {
  formatTime,
  debounce,
  throttle,
  generateId,
  deepClone,
  calculatePrice,
  formatPrice,
  validatePhone,
  validateEmail,
  getImageInfo,
  showLoading,
  hideLoading,
  showSuccess,
  showError,
  showConfirm,
  navigateTo,
  setNavigationBarTitle,
  getSystemInfo,
  getUserInfo
}
